#include "sendfile.h"
#include <QThread>
#include <QDebug>
#include <QFile>
#include <QFileInfo>
#include <QtEndian>

sendfile::sendfile(qintptr socket,QObject *parent) : QObject(parent)
{
    m_socket = socket; //传递的用于通信的套接字，通过此可以与主函数建立连接的套接字通信
}

void sendfile::working(QString path)
{
    qDebug()<<"当前子线程的Id:" <<QThread::currentThreadId();
    m_tcp = new QTcpSocket;
    m_tcp->setSocketDescriptor(m_socket); //设置socket文件描述符，m_socket就可以通信啦

    connect(m_tcp,&QTcpSocket::disconnected,this,[=]()
            {
                m_tcp->close();
                m_tcp->deleteLater();
                emit done();
                qDebug() << "客户端数据已经接受完毕，并断开了连接,开始销毁套接字对象,拜拜...";
            });
    qDebug()<<"发送的文件名字:"<<path;
    nowsize = 0;
    //通过QFile打开文件
    QFile file(path);
    //获取文件的总长度
    QFileInfo FileData(path);
    totalsize = FileData.size();
    emit tot_size_signal(totalsize);
    //将文件总大小传过去
    QString size = QString::number(totalsize);
    qint64 length = m_tcp->write(size.toUtf8());
    m_tcp->waitForBytesWritten();

    if(length > 0)
    {
        QThread::msleep(50); //休息
    }
    bool bl = file.open(QFile::ReadOnly);
    if(bl)
    {
        while(!file.atEnd()) //如果文件没有读完
        {

            QByteArray line = file.readLine();

            // 添加包头
            int len = qToBigEndian(line.size());
            QByteArray data(reinterpret_cast<char*>(&len), 4);
            data.append(line);

            // 发送数据
            m_tcp->write(data);
            //读取数据

            // 信号
            emit text(line);
            //发送目前的line量
            nowsize +=line.size();
            emit now_size_signal(nowsize);

            //qDebug()<<"发送的数据为"<<line;
            //
            QThread::msleep(50); //休息
        }
    }
    file.close();
}
